package main.java.com.gdkj.api;

import io.netty.channel.Channel;
import main.java.com.gdkj.dto.socket.ClientSocketDataVO;
import main.java.com.gdkj.dto.socket.GameDataPacket;

/**
 * 游戏端服务
 *
 * @author: zw
 * @date: 2023/9/6
 **/
public interface IGameProvide {
    /**
     * 绑定处理
     *
     * @param channelId
     * @return void
     * @date 2023/9/7
     **/
    void dealBindInfo(String channelId);

    /**
     * 客户端断开连接处理
     *
     * @param channelId
     * @param reason
     * @return void
     * @date 2023/9/7
     **/
    void dealOutConnection(String channelId,String reason);

    /**
     * 客户端操作处理
     *
     * @param dataVO
     * @return void
     * @date 2023/9/7
     **/
    void dealClientOption(ClientSocketDataVO dataVO,String jsonStr);

    /**
     * 心跳超时处理
     *
     * @date 2023/06/02
     * @param channelId
     * @return void
     **/
    void dealOutConnectionLeaveRoom(String channelId);




    /**
     * 控制板回调处理
     *
     * @param gameDataPacket
     * @param channelId
     * @param boardId
     * @param byteStr
     * @return void
     * @date 2023/9/7
     **/
    void dealBoardReBack(GameDataPacket gameDataPacket, String channelId, String boardId, String byteStr);

    /**
     * 处理娃娃机控制板回调
     * @param channelId
     * @param boardId
     * @param byteStr
     */
    void dealWaWaBoardReBack( String channelId, String boardId, String byteStr);

    /**
     * 服务端断开处理
     *
     * @param channelId
     * @param ipAddr
     * @return void
     * @date 2023/9/7
     **/
    void updateSeatOffLine(String channelId,String ipAddr);

    /**
     * 服务端连接处理
     *
     * @param channelId
     * @param ipAddr
     * @param boardId
     * @return void
     * @date 2023/9/7
     **/
    void updateSeatOnline(String channelId, String boardId, String ipAddr);



    /**
     * 发送控制面断开链接钉钉消息
     * @param controlChannelId 服务端与控制面板连接唯一标识符
     * @param type 0 客户端强制断开链接 1 心跳读超时
     * @param ipAddr 地址
     * @return void
     */
    void sendControlBoardDisconnect(String controlChannelId,String ipAddr, Integer type);

    
    /**
     * 上分定时任务
     *
     * @return void
     * @date 2023/9/7
     **/
    void task();

    /**
     * 实体推币机上分
     **/
    void pushCoinAddCoin();

    /**
     * 实体推币机结算
     **/
    void checkPushCoinSettle();

    /**
     * 下机定时处理
     **/
    void dealOffAck();

    /**
     * 排行榜奖励结算
     **/
    void rankAmountSettlement();

    /**
     * 重复下机定时处理
     **/
    void sendOffMic();

    /**
     * 领取所有周月卡奖励
     **/
    void sendAllCardAward();

    /**
     * 球机服务端连接处理
     *
     * @param channelId
     * @param boardId
     * @param ipAddr
     */
    void updateBallMachineOnline(String channelId, String boardId, String ipAddr);

    /**
     * 球机服务端断开处理
     *
     * @param channelId
     * @param ipAddr
     */
    void updateBallMachineOffLine(String channelId, String ipAddr);

    /**
     * 球机状态同步
     *
     * @param entityMachineId
     * @param stateData
     */
    void updateBallMachineState(String entityMachineId, byte[] stateData);

    /**
     * 球机游戏结果通知
     *
     * @param entityMachineId
     * @param gameOverData
     */
    void ballMachineGameOver(String entityMachineId, byte[] gameOverData);
}
